package it.storm.solution;

import java.util.Arrays;

/**
 * 面试题 16.15. 珠玑妙算（与 299 同）
 * https://leetcode-cn.com/problems/master-mind-lcci/
 */
public class Solutions_mianshi_16_15 {
    public static void main(String[] args) {
//        String solution="RGBY", guess="GGRR";  // output: {1, 1}
        String solution="RGBY", guess="BGYY";  // output: {2, 1}

        int[] result = masterMind(solution, guess);
        System.out.println(Arrays.toString(result));
    }

    public static int[] masterMind(String solution, String guess) {
        int[] res = {0, 0};
        // 建立哈希数组：map1[65] = 2，表示字母 A 在字符串 solution 中出现了 2 次
        int[] map1 = new int[97];
        int[] map2 = new int[97];
        // count = 2，表示字符串 solution 与 guess 中共有 2 个元素互相相同（即总共猜到了 2 次）
        int count = 0;

        for (int i = 0; i < 4; i++) {
            char s = solution.charAt(i);
            char g = guess.charAt(i);
            if (s == g) {
                // 记录下“猜中”的次数
                res[0] ++;
            }
            map1[s] ++;
            map2[g] ++;
        }
        for (int i = 0; i < 97; i++) {
            if (map1[i] != 0 && map2[i] != 0) {
                // 最少有 count 个字符相同
                count += Math.min(map1[i], map2[i]);
            }
        }
        // 伪猜中次数 = 总猜对次数 - 猜中的次数
        res[1] = count - res[0];
        return res;
    }
}
